import 'dart:ui';

import 'package:flutter/widgets.dart';
import 'package:lib_uikit/lib_uikit.dart';

/// @Title   text文案相关工具类
/// @Author: bryce
/// @CreateDate: 2023年08月30日15:34:36
class TextUtils {
  static bool isEmpty(String? content) => content?.isEmpty ?? true;

  static bool isNotEmpty(String? content) => content?.isNotEmpty ?? false;

  /// 计算文字绘制的宽高
  static Size calculateTextSize(
    BuildContext context,
    String value, {
    // 文本支持最大多少行;
    int maxLines = 1,
    // 文本框的最大宽度,如果是多行文字的话，要传这个，否则计算不准
    double maxWidth = double.infinity,
    // 如果传了textStyle则不用传fontSize和fontWeight，否则需要传
    TextStyle? textStyle,
    double fontSize = 12,
    FontWeight? fontWeight, // 文字权重 (加粗)；
    Locale? locale,
  }) {
    TextPainter textPainter = calculateTextSizeForPainter(context, value,
        maxLines: maxLines,
        maxWidth: maxWidth,
        textStyle: textStyle,
        fontSize: fontSize,
        fontWeight: fontWeight,
        locale: locale);
    return textPainter.size;
  }

  /// 计算文字绘制的宽高
  static TextPainter calculateTextSizeForPainter(
    BuildContext context,
    String value, {
    // 文本支持最大多少行;
    int maxLines = 1,
    // 文本框的最大宽度,如果是多行文字的话，要传这个，否则计算不准
    double maxWidth = double.infinity,
    // 如果传了textStyle则不用传fontSize和fontWeight，否则需要传
    TextStyle? textStyle,
    double fontSize = 12,
    FontWeight? fontWeight, // 文字权重 (加粗)；
    Locale? locale,
  }) {
    TextStyle realTextStyle = textStyle?.copyWith(fontFamily: 'GTFontFamily').copyWith(package: 'lib_uikit') ??
        gtTextStyle(fontSize: fontSize).copyWith(fontWeight: fontWeight);
    //过滤文本
    TextPainter painter = TextPainter(
        // 华为手机如果不指定locale的时候，该方法算出来的文字高度是比系统计算偏小的。
        locale: locale ?? GTThemeProvider.instance.getLocale(),
        maxLines: maxLines,
        textDirection: TextDirection.ltr,
        text: TextSpan(text: value, style: realTextStyle));
    // 设置layout
    painter.layout(maxWidth: maxWidth);
    return painter;
  }

  /// 判断结尾是不是小括号（包括中文小括号）
  static bool checkEndBrackets(String? value) {
    if (isEmpty(value)) return false;
    value = value!.trim();
    return value.endsWith(')') || value.endsWith('）');
  }

  /// 获取文案末尾的小括号（和里面内容）
  static String? getEndBrackets(String? value) {
    if (!checkEndBrackets(value)) return null;
    value = value!.trim();
    Iterable<Match> matches = RegExp(r'[(（].*?[)）]$').allMatches(value);
    if (matches.isNotEmpty) {
      Match match = matches.last;
      // 括号和里面内容
      String bracketsStr = match.group(0)!;
      return bracketsStr;
    }
    return null;
  }
}
